package com.yzh.map.teacher;

import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

/**
 * 使用Map存储国家简称-国家名称映射
 * HashMap 哈希表
 *    key：无序  唯一  HashSet
 *    value：无序 不唯一  Collection
 * LinkedHashMap 哈希表+链表
 *    key:有序（添加顺序）  唯一  LinkedHashSet
 *    value：无序 不唯一  Collection
 *
 *  TreeMap 红黑树
 *   key：有序（自然顺序） 唯一 TreeSet
 *   value：无序 不唯一  Collection
 *
 *  Set和Map的关系
 *    如何Map中只存储key，不存储value，就是对应的Set
 *    Set就是对应Map的key的集合
 *
 * 使用Map最多的四个操作
 * 1.创建对象Map<String,String> map = new TreeMap<String,String>();
 * 2.添加key-value键值对 map.put("cn","China");
 * 3.根据key或者value  map.get("fr")
 * 4.遍历Map:Set<Map.Entry<String,String>> entrySet = map.entrySet();
 */
public class TestMap1 {
    public static void main(String[] args) {
        //创建一个Map对象
        //Map<String,String> map = new HashMap<String,String>();
        //Map<String,String> map = new LinkedHashMap<String,String>();
        Map<String,String> map = new TreeMap<String,String>();
        //使用Map对象存储键值对
        map.put("cn","China");
        map.put("jp","Japan");
        map.put("us","the United States");
        map.put("us","America");
        map.put("uk","the United Kingdom");
        map.put("en","the Untied Kingdom");

        //使用键获取值
        System.out.println(map.size());
        System.out.println(map);//所有的key-value
        System.out.println(map.entrySet());
        System.out.println(map.keySet());//所有的key  Set类型
        System.out.println(map.values());//所有的value Collection
        System.out.println(map.get("cn"));
        System.out.println(map.get("fr"));

        //遍历Map
        //方式1：得到所有的key组成的Set
        Set<String> keySet = map.keySet();
        for(String key:keySet){
            System.out.println(key+"----->"+map.get(key));
        }
        //方式2：得到所有Entry（就是一个哈希表或者红黑树中节点类）组成的set集合
        Set<Map.Entry<String,String>> entrySet = map.entrySet();
        Iterator <Map.Entry<String,String>>it = entrySet.iterator();
        while(it.hasNext()){
            Map.Entry<String,String> entry = it.next();
            //System.out.println(entry);
            System.out.println(entry.getKey()+":"+entry.getValue());
        }
    }
}
